package main

import (
	"fmt"
)

var println = fmt.Println

var p = struct {
	Name string
	Age  uint8
}{"xiaobai", 5}

func switchFn(a interface{}) {
	switch a.(type) {
	case bool:
		println("bool")
		break
	case string:
		println("string")
		break
	}
}

func main() {
	println(p)
	var t1, t2 interface{}
	t1, t2 = map[string]string{"name": "xiaobai"}, map[string]int{}
	/*
		1.类型断言就是将接口类型的值(x)，转换成类型(T)。格式为：x.(T);
		2.类型断言的必要条件就是x是接口类型，非接口类型的x不能做类型断言；
		3.T可以是非接口类型，如想断言合法，则T必须实现x的接口；
		4.T也可以是接口，则x的动态类型也应该实现接口T；
		5.类型断言如果非法，运行失败时会导致错误，为了避免这种错误，应该总是使用下面的方式来进行类型断言
	*/

	v, ok := t1.(map[string]string)
	if ok {
		println(v)
		v["name"] = "xiaohei"
	}

	println(t1, t2)

	switchFn(false)

	m3 := map[string]string{
		"a": "aa",
		"b": "bb",
	}
	println(m3["c"])
}
